PHP大法好—>安全的代码

0x00 首先

目前在深入的学习PHP中 自己是个学安全的 所以对于代码的安全较为敏感 网站的的漏洞源于代码的漏洞 白盒狗专注代码漏洞挖掘30年

学好代码审计的关键也是写好代码的关键:

  • 了解恶意用户要从哪些入口攻击整个框架
  • 一切输入都是有害的
  • 不要信任任何一个用户
  • 代码的逻辑

0x01 过滤输入

a.验证提交值是否为期望值或者允许值

<html>
<form action="" method="post">
<input type="radio" name="gender" value="Male">Male<br/>
<input type="radio" name="gender" value="Female">Female<br/>
<input type="submit" name="submit" value="submit"><br/>
</form>
</html>
(a):
<?php
if(!empty($_POST))
{
echo "The user's gender is ".$_POST['gender'].".<br/>";
}
?>

(b):
<?php
if(!empty($_POST))
{
switch ($_POST['gender'])
{
case 'Male':
case 'Female':
echo "The user's gender is ".$_POST['gender'].".<br/>";
break;

default:
echo "Invalid input value for gender specified.<br/>";
break;
}
}
?>

比较一下(a)(b)两种后台验证 (b)显然确保了正确值 对于处理数据方面显然很重要

b.确认提交类型是否为允许类型

$number_of_nights = (int)$_POST[’num_nights’];
if($num_of_nights == 0)
{
echo “Error: Invalied number of nights for the room”;
exit;
}

这种不仅能确认正确的输入 也可以改进系统的安全

c.输入数据库的数据

  • 输入必须使用addslashes()函数
  • stripslashes()用来返回数据的原始形式
  • php.ini文件中开启magic_quotes_gpc(格式化GET POST和cookie变量)magic_quotes_runtime(格式化进入数据库的数据) 自动添加和过滤斜杠

d.其他恶意输入

  • 当用户传递数据给system()exec()时 必须使用escapeshellcmd()避免任何恶意用户运行系统命令
    <?php
    $a = escapeshellcmd($_GET['id']); //1.php?id=sixwhale;ls
    $b = $_GET['id'];
    system("echo $a");//结果(1)
    echo "<p>";
    system("echo $b");//结果(2)
    ?>


    结果(1): sixwhale;ls
    结果(2): sixwhale 1.php(遍历当前目录下所有文件)

;在shell里是分割命令的作用 所以可想而知 只要改变;后的值就可以导致很多命令注入

  • strip_tags()去掉HTML和PHP标记 避免恶意脚本植入

0x02 转义输出

最常见的就是插入恶意的HTML代码 使用htmlspecialchars()或者htmlentities()函数

……

0x03 (//∀//)

今天看到了PHP与web安全的部分 虽然之前在网上了解过 实践中也有接触 但是感觉还是自己总结笔记印象比较深刻(毕竟还是希望在博客里写一些对自己有用的东西!!!) 只写了一部分 不定期更新中 希望不要吐槽啦(இдஇ; )